console.log("加载汉化模块");

//1.汉化杂项
var cnItems = {
    _OTHER_: [],
    'Base Speed': '基础速度',
    'Prestige D.Mult': '声望D.加成',
    'Prestige S.Mult': '声望S.加成',
    'No Target': '无目标',
    'Max Bullets': '子弹上限',
    'Break Pts': '突破点',
    'Dimensionality': '维数',
    'Friction': '摩擦力',
    'Spawn Time': '产生时间',
    'Way Pts': '方式点',
    'Reach Stage 20 to be able to prestige': '达到20级才能有声望',
    'Size D.Mult': '尺寸D.加成',
    'DMG': '伤害',
    'DMG/ym': '伤害/ym',
    'Press [Z] to boost up all': '按[Z]键将所有内容向上推',
    'Ring Effects: ON': '环效果：开启',
    'Ring Effects: OFF': '环效果：关闭',
    'Shadows: OFF': '阴影：关闭',
    'Shadows: ON': '阴影：开启',
    'SpeedUp time': '加速时间',
    'Wall Weaker': '壁材弱化',
    'Notation: Common': '符号：普通',
    'Notation: Scientific': '符号：科学计数法',
    'Notation: Engineering': '符号：工程符号',
    'Max Size-': '尺寸上限-',
    'Max Popups': '最大弹出窗口',
    'Autotarget: No': '自动定位：否',
    'Autotarget: Fastest': '自动定位：最快',
    'Autotarget: Newest': '自动定位：最新',
    'Autotarget: Oldest': '自动定位：最老',
    'Autotarget: Slowest': '自动定位：最慢',
    'Autotarget: Strongest': '自动定位：最强',
    'Autotarget: Weakest': '自动定位：最弱',
    'Spd. Mult': '速度加成',
    'x 3 game speed': 'x 3 游戏速度',
    'Crit Chance': '暴击几率',
    'Crit Power': '暴击伤害',
    'Dmg Mult': '伤害加成',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    '': '',
    //原路返回
    'a': 'a',
}

//需处理的前缀
var cnPrefix = {
}

//需处理的后缀
var cnPostfix = {
    ' ':' '
}

//需排除的，正则匹配
var cnExcludeWhole= [
    /^[x+\-]?\d+(\.\d+)?(e[+\-]?\d+)?(\%)?\s*$/,                                          //12.34e+4
    /^\s*$/,                                                                //纯空格
];
var cnExcludePostfix = [
    /:?\s*x?\d+(\.\d+)?(e[+\-]?\d+)?\s*$/,                                          //12.34e+4
    /:?\s*x?\d+(\.\d+)?[A-Za-z]{0,2}$/,  //: 12.34K, x1.5
]

//正则替换，带数字的固定格式句子
//纯数字：(\d+)
//逗号：([\d\.,]+)
//小数点：([\d\.]+)
//原样输出的字段：(.+)
var cnRegReplace = new Map([
	[/^Size: (.+)$/, '尺寸：$1'],
	[/^(.+) Mil \/ (.+) Mil$/, '$1 英里 \/ $2 英里'],
	[/^A.Der.: (.+)\/s$/, 'A.Der.：$1\/秒'],
	[/^Reach Stage (.+) to inc. pr. rewards by$/, '达到阶段$1到inc. pr.奖励'],
	[/^(.+) sec$/, '$1秒'],
	[/^(.+)\/sec$/, '$1\/秒'],
	[/^(.+) sec.$/, '$1秒.'],
	[/^Distance: (.+)$/, '距离：$1'],
	[/^Max Spd: (.+)\/sec$/, '最大速度：$1\/秒'],
	[/^(.+) ym\/s -> (.+) ym\/s$/, '$1 ym\/秒 -> $2 ym\/秒'],
	[/^DMG: (.+) \/ \(ym\/s\)$/, '伤害：$1 \/ \(ym\/秒\)'],
	[/^(.+) way pts$/, '$1 方式点'],
	[/^Break Pts: (.+)$/, '突破点：$1'],
	[/^Size: (.+) ym$/, '尺寸：$1 ym'],
	[/^Size: (.+) ym - (.+) ym$/, '尺寸：$1 ym - $2 ym'],
	[/^Friction: (.+)\/sec$/, '摩擦力：$1\/秒'],
	[/^Size D.Mult: (.+)$/, '尺寸D.加成：$1'],
	[/^Accel.: (.+) ym\/s$/, '加速：$1 ym/秒'],
	[/^Accel.: (.+)\/s$/, '加速：$1\/秒'],
	[/^Crit. CH.: (.+)$/, '暴击 CH.：$1'],
	[/^Crit. Pow.: (.+)$/, '暴击 Pow.：$1'],
	[/^(.+) break pts$/, '$1 突破点'],
	[/^(.+) yoctometers$/, '$1 八度表'],
	[/^(.+) ym\/sec$/, '$1 ym\/秒'],
	[/^Cooldown: (.+) sec.$/, '冷却时间: $1 秒.'],
	[/^Distance: (.+) ym$/, '距离: $1 ym'],
	[/^Wall Toughness: (.+)$/, '壁韧性：$1'],
	[/^Way Pts: (.+)$/, '方式点：$1'],
	[/^particles by (.+) of Base Spd, A, AD$/, '粒子占基础Spd，A，AD的$1'],
	[/^Locked! Reach Ring (.+) to unlock!$/, '锁定！ 到达环$1即可解锁！'],

]);

//2.采集新词
//20190320@JAR

var cnItem = function () {

    //传参是否非空字串
    if (!arguments[0]) return;

    //检验传参是否对象
    let text = arguments[0],
        s = '';
    if (typeof (text) != "string")
        return text;
    else
        s = arguments[0].charCodeAt();

    //检验传参是否英文
    // if (
    //     s < 65 || (s > 90 && s < 97) || (s > 122)
    //
    // ) return text;

    //处理前缀
    let text_prefix = "";
    for(let prefix in cnPrefix){
        if (text.substr(0,prefix.length) === prefix){
            text_prefix = cnPrefix[prefix];
            text = text.substr(prefix.length);
        }
    }
    //处理后缀
    let text_postfix = "";
    for(let postfix in cnPostfix){
        if (text.substr(-postfix.length) === postfix){
            text_postfix = cnPostfix[postfix];
            text = text.substr(0,text.length-postfix.length);
        }
    }
    //处理正则后缀
    let text_reg_exclude_postfix = "";
    for(let reg of cnExcludePostfix){
        let result = text.match(reg);
        if (result){
            text_reg_exclude_postfix = result[0];
            text = text.substr(0, text.length-text_reg_exclude_postfix.length);
        }
    }

    //检验字典是否可存
    if (!cnItems._OTHER_) cnItems._OTHER_ = [];

    //检查是否排除
    for(let reg of cnExcludeWhole){
        if (reg.test(text)){
            return text_prefix + text + text_reg_exclude_postfix + text_postfix;
        }
    }
    
    //尝试正则替换
    for (let [key, value] of cnRegReplace.entries()) {
        if (key.test(text)) {
            return text_prefix + text.replace(key, value) + text_reg_exclude_postfix + text_postfix;
        }
    }

    //遍历尝试匹配
    for (let i in cnItems) {
        //字典已有词汇或译文、且译文不为空，则返回译文
        if (
            text == i || text == cnItems[i] &&
            cnItems[i] != ''
        )
            return text_prefix + cnItems[i] + text_reg_exclude_postfix + text_postfix;
    }

    //调整收录的词条，0=收录原文，1=收录去除前后缀的文本
    let save_cfg = 1;
    let save_text = save_cfg?text:arguments[0]
    //遍历生词表是否收录
    for (
        let i = 0; i < cnItems._OTHER_.length; i++
    ) {
        //已收录则直接返回
        if (save_text == cnItems._OTHER_[i])
            return arguments[0];
    }

    if (cnItems._OTHER_.length < 500){
        //未收录则保存
        cnItems._OTHER_.push(save_text);
        cnItems._OTHER_.sort(
            function (a, b) {
                return a.localeCompare(b)
            }
        );
    }

    /*
        //开启生词打印
        //console.log(
            '有需要汉化的英文：', text
        );
    */

    //返回生词字串
    return arguments[0];
};

var cnInit = function(canvasElement){
		canvasElement.getContext('2d').fillText = function(text,x,y,max){
			return this.__proto__.fillText.bind(this)(cnItem(text),x,y,max);
		}
		canvasElement.getContext('2d').strokeText = function(text,x,y,max){
			return this.__proto__.strokeText.bind(this)(cnItem(text),x,y,max);
		}
		canvasElement.getContext('2d').measureText = function(text){
			return this.__proto__.measureText.bind(this)(cnItem(text));
		}
}
